const resultEl = document.getElementById('result')
const lengthEl = document.getElementById('length')
const uppercaseEl = document.getElementById('uppercase')
const lowercaseEl = document.getElementById('lowercase')
const numbersEl = document.getElementById('numbers')
const symbolsEl = document.getElementById('symbols')
const generateEl = document.getElementById('generate')
const clipboardEl = document.getElementById('clipboard')

const randomFunc = {
    lower: getRandomLower,
    upper: getRandomUpper,
    number: getRandomNumber,
    symbol: getRandomSymbol
}

clipboardEl.addEventListener('click', () => {

    const textarea = document.createElement('textarea')
    const password = resultEl.innerText

    // if (!password) {
    //     return
    // }

    textarea.value = password

    document.body.appendChild(textarea)

    textarea.select()

    document.execCommand('copy')

    textarea.remove()
    alert('密码复制成功')
})

generateEl.addEventListener('click', () => {
    const length = +lengthEl.value

    const hasLower = lowercaseEl.checked
    const hasUpper = uppercaseEl.checked


    const hasNumber = numbersEl.checked

    const hasSymbol = symbolsEl.checked

    resultEl.innerText = generatePassword(hasLower, hasUpper, hasNumber, hasSymbol, length)

})
generatePassword()

function generatePassword(lower, upper, number, symbol, length) {
    let generatePassword = ''
    const typesCount = lower + upper + number + symbol





    const typesArr = [{

        lower
    }, {
        upper
    }, {
        number
    }, {
        symbol
    }].filter(
        item => {


            return Object.values(item)[0]
        }
    )

    if (typesCount === 0) {
        return ''
    }

    for (let i = 0; i < length; i += typesCount) {
        typesArr.forEach(type => {

            const funcName = Object.keys(type)[0]
            generatePassword += randomFunc[funcName]()
            console.log('generatePassword: ', generatePassword);

        });

    }
    const finalPassword = generatePassword.slice(0, length)

    return finalPassword

}
getRandomLower()

function getRandomLower() {
    // a-z：97-122，A-Z：65-90，0-9：48-57。

    return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
}

function getRandomUpper() {

    return String.fromCharCode(Math.floor(Math.random() * 26) + 65)
}

function getRandomNumber() {
    return String.fromCharCode(Math.floor(Math.random() * 10) + 48)
}

function getRandomSymbol() {
    const symbols = '!@#$%^&*(){}[]=<>/,.'

    return symbols[Math.floor(Math.random() * symbols.length)]
}